package ManagedBeans;

import Librerias.Estado;
import Librerias.Pedido;
import Librerias.Usuario;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import javax.enterprise.context.SessionScoped;
import javax.faces.context.FacesContext;
import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;

@Named(value = "managedBeanPedido")
@SessionScoped
public class ManagedBeanPedido implements Serializable {
    private EntityManagerFactory emf = Persistence.createEntityManagerFactory("Tienda_slorenzoPU");
    private EntityManager em = emf.createEntityManager();
    private ArrayList<Pedido> lista = new ArrayList<Pedido>();
    private Pedido pedido;
    private int estad;
    private int idp;
    
    public ManagedBeanPedido() {   }
    
   public void cargarListaPendientes(int condicion, int usr){
        this.lista.clear();
        ManagedBeanUsuario mbu = new ManagedBeanUsuario();
        Usuario us = mbu.buscarUsuario(usr);
        Query query;
        query = em.createNamedQuery("Pedido.findByPendienteAndUsuario");
        query.setParameter("pendiente", condicion);
        query.setParameter("idusuario", us); 
        Collection<Pedido> ped =query.getResultList();
        for(Pedido p : ped){
            pedido = new Pedido();
            pedido.setId(p.getId());
            pedido.setFecha(p.getFecha());
            pedido.setIdusuario(p.getIdusuario());
            pedido.setIdestado(p.getIdestado());
            this.getLista().add(pedido);
        }
    }
   
   public void cargarLista(){
       this.lista.clear();
       Query query;
       query = em.createNamedQuery("Pedido.findByPendiente");
       query.setParameter("pendiente", 0);
       Collection<Pedido> ped =query.getResultList();
       for(Pedido p : ped){
            pedido = new Pedido();
            pedido.setId(p.getId());
            pedido.setFecha(p.getFecha());
            pedido.setIdusuario(p.getIdusuario());
            pedido.setIdestado(p.getIdestado());
            this.getLista().add(pedido);
        }
   }
    public ArrayList<Pedido> getLista() {
        return lista;
    }

    public void setLista(ArrayList<Pedido> lista) {
        this.lista = lista;
    }
    
    public int numeroPedidos(){
        cargarLista();
        return lista.size();
    }
    
    public String estadoPedido(){
        try{
            int c = Integer.parseInt(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("pedido"));
            this.setIdp(c);
            Pedido p = em.find(Pedido.class, c);
            Estado e = p.getIdestado();
            return e.getNombre();
        }catch(Exception e){ }
            return null;
    }
    
    public int idPedido(){
        try{
            int c = Integer.parseInt(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("pedido"));
            Pedido p = em.find(Pedido.class, c);
            return p.getId();
        }catch(Exception e){       }
        return -1;
    }

    public int getEstad() {
        return estad;
    }

    public void setEstad(int estad) {
        this.estad = estad;
    }
    
    public String cambiarEstado(){
        Estado e = em.find(Estado.class, this.estad);
        int c = this.getIdp();
        Pedido p = em.find(Pedido.class, c);
        em.getTransaction().begin();
        p.setIdestado(e);
        em.merge(p);
        em.getTransaction().commit();
        
        return "volver";
    }

    public int getIdp() {
        return idp;
    }

    public void setIdp(int idp) {
        this.idp = idp;
    }
    
    public String cambiarEstado(Pedido p){
        short i = 0;
        
        Pedido p2 = em.find(Pedido.class, p.getId());
        Estado e = em.find(Estado.class, 1);
        
        em.getTransaction().begin();
        p2.setIdestado(e);
        p2.setPendiente(i);
        em.merge(p2);
        em.getTransaction().commit();
        
        return "recargar";
    }
    
    public String eliminarPedido(Pedido p){
        Pedido p2 = em.find(Pedido.class, p.getId());
        
        em.getTransaction().begin();
        em.remove(p2);
        em.getTransaction().commit();
        
        return "recargar";
    }

    public void crearPedido(short reembolso, Date fecha, Estado idestado, Usuario idusuario, String numerotarjeta, Date fechacaducidad, short pendiente) {
        Pedido p = new Pedido();
        em.getTransaction().begin();
        p.setReembolso(reembolso);
        p.setFecha(fecha);
        p.setIdestado(idestado);
        p.setIdusuario(idusuario);
        p.setNumerotarjeta(numerotarjeta);
        p.setFechacaducidad(fechacaducidad);
        p.setPendiente(pendiente);
        em.persist(p);
        em.getTransaction().commit();
    }
}

